package test.obj;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class PackageScanner {

	private static String basePack = "com.fudan";
	private static List<String> classPaths = new ArrayList<String>();
	public static void scan() throws Exception {
		String classpath = PackageScanner.class.getClassLoader().getResource("").getPath();
		basePack = basePack.replace(".", File.separator);
		String searchPath = classpath + basePack;
		doPath(new File(searchPath));
		for (String s : classPaths) {
            //把 D:\work\code\20170401\search-class\target\classes\com\baibin\search\a\A.class 这样的绝对路径转换为全类名com.baibin.search.a.A
            s = s.replace(classpath.replace("/","\\").replaceFirst("\\\\",""),"").replace("\\",".").replace(".class","");
            Class cls = Class.forName(s);
            System.out.println(cls);
        }
	}


    /**
     * 该方法会得到所有的类，将类的绝对路径写入到classPaths中
     * @param file
     */
    private static void doPath(File file) {
        if (file.isDirectory()) {//文件夹
            //文件夹我们就递归
            File[] files = file.listFiles();
            for (File f1 : files) {
                doPath(f1);
            }
        } else {//标准文件
            //标准文件我们就判断是否是class文件
            if (file.getName().endsWith(".class")) {
                //如果是class文件我们就放入我们的集合中。
                classPaths.add(file.getPath());
            }
        }
    }

    public static void main(String[] args) throws Exception {
    	scan();
	}
}
